home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / pd / netz / mailfilter / arexx / add_pgp-header.mailfilter next >
Text File  |  1995-07-09  |  3KB  |  166 lines

  1. /* Add_PGP-Header.mailfilter */
  2.  
  3. /*
  4. ** $VER: Add_PGP-Header.mailfilter 1.1 (9.7.95)
  5. **
  6. ** Dieses Script ist dazu gedacht, bei PGP verschlüsslten Nachrichten
  7. ** wieder einen 'CRYPT:'-Header einzutragen, wenn dieser z.B. durch die
  8. ** Konvertierung von/nach RFC-Format verlorengegangen ist.
  9. **
  10. ** Das Script überprüft ob ein 'CRYPT:'-Header vorhanden ist, wenn ja
  11. ** wird die Originalnachricht unverändert übernommen. Sonst wird geprüft
  12. ** ob die erste Zeile des Inhalts '-----BEGIN PGP MESSAGE-----' ist,
  13. ** wenn dies zutrifft wird die Zeile 'CRYPT: PGP' zum Header hinzugefügt.
  14. ** Das Pointprogramm kann anschließend die Nachricht als PGP erkennen
  15. ** und automatisch entschlüsseln.
  16. */
  17.  
  18. /*
  19. ** Ergebnisse anfordern
  20. */
  21.  
  22. OPTIONS RESULTS
  23.  
  24.  
  25.  
  26. /*
  27. ** Headerdatei komplett einlesen und auf 'CRYPT:'-Header prüfen
  28. */
  29.  
  30. anzahl = 0
  31.  
  32. IF OPEN('header','T:MailFilter_Header.mftemp','READ') THEN DO
  33.    DO WHILE ~EOF('header')
  34.  
  35.       /*
  36.       ** Eine Zeile einlesen, aber ACHTUNG! Die ARexx-Funktion 'READLN()'
  37.       ** enthält einen Bug und kann deshalb nur Zeilen mit höchstens 1000
  38.       ** Zeichen einlesen, zum Einlesen von Headerzeilen deshalb immer die
  39.       ** Funktion 'ReadZeile()' benutzen!
  40.       */
  41.  
  42.       zeile.anzahl = ReadZeile('header')
  43.  
  44.       /*
  45.       ** Abbrechen, wenn der Header zu Ende ist
  46.       */
  47.  
  48.       IF zeile.anzahl = '' THEN
  49.          BREAK
  50.  
  51.       /*
  52.       ** Wenn die Nachricht einen 'CRYPT:'-Header enthält wird das
  53.       ** Script mit EXIT(10) beendet, damit wird die Originalnachricht
  54.       ** unverändert in den Zielpuffer übernommen.
  55.       */
  56.  
  57.       IF UPPER(LEFT(zeile.anzahl,6)) = 'CRYPT:' THEN
  58.          EXIT(10)
  59.  
  60.       /*
  61.       ** Zähler erhöhen, die abschließende Leerzeile wird nicht mitgezählt
  62.       */
  63.  
  64.       anzahl = anzahl+1
  65.    END
  66. END
  67.  
  68.  
  69.  
  70. /*
  71. ** Headerdatei schließen
  72. */
  73.  
  74. CALL CLOSE('header')
  75.  
  76.  
  77.  
  78. /*
  79. ** Erste Zeile der Inhaltdatei einlesen, und
  80. ** auf '-----BEGIN PGP MESSAGE-----' prüfen
  81. */
  82.  
  83. IF OPEN('inhalt','T:MailFilter_Inhalt.mftemp','READ') THEN DO
  84.  
  85.    /*
  86.    ** Erste Zeile des Inhalts einlesen
  87.    */
  88.  
  89.    pgpzeile = READLN('inhalt')
  90.  
  91.    /*
  92.    ** Wenn die erste Zeile auf den Anfang einer PGP-verschlüsselten
  93.    ** Nachricht hinweist, dann einen 'CRYPT:'-Header ergänzen
  94.    */
  95.  
  96.    IF pgpzeile = '-----BEGIN PGP MESSAGE-----' THEN DO
  97.       zeile.anzahl = 'CRYPT: PGP'
  98.       anzahl = anzahl+1
  99.       zeile.anzahl = ''
  100.    END
  101. END
  102.  
  103.  
  104.  
  105. /*
  106. ** Headerdatei neu schreiben
  107. */
  108.  
  109. IF OPEN('header','T:MailFilter_Header.mftemp','WRITE') THEN DO
  110.  
  111.    /*
  112.    ** Alle Zeilen (einschließlich der abschließenden Leerzeile !!!)
  113.    ** neu in die Headerdatei schreiben
  114.    */
  115.  
  116.    DO i = 0 TO anzahl
  117.       CALL WRITELN('header',zeile.i)
  118.    END
  119. END
  120.  
  121.  
  122.  
  123. /*
  124. ** Script beenden
  125. */
  126.  
  127. EXIT(0)
  128.  
  129.  
  130.  
  131. /*
  132. ** Diese Funktion liest eine beliebig lange Zeile aus einer Datei
  133. ** und umgeht damit den Bug in der ARexx-Funktion 'READFILE()'!
  134. **
  135. ** Als Argument muß der logische Name der Datei übergeben werden.
  136. ** Die Funktion liefert als Ergebnis die eingelesene Zeile.
  137. */
  138.  
  139. ReadZeile:
  140.    PROCEDURE
  141.    PARSE ARG datei
  142.  
  143.    /*
  144.    ** Eine Zeile einlesen
  145.    */
  146.  
  147.    zeile = READLN(datei)
  148.  
  149.  
  150.    /*
  151.    ** Prüfen ob das letzte gelesene Zeichen ein LF war, wenn nicht
  152.    ** weiterlesen bis ein LF gefunden wird.
  153.    */
  154.  
  155.    DO FOREVER
  156.       CALL SEEK(datei,-1,'CURRENT')
  157.       zeichen = READCH(datei)
  158.  
  159.       IF zeichen = '0A'x THEN
  160.          BREAK
  161.       ELSE
  162.          zeile = zeile||READLN(datei)
  163.    END
  164.  
  165. RETURN(zeile)
  166.